﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ExpertSystem.Interfaces
{
    public interface IVariable
    {
        /// <summary>
        /// Имя переменной
        /// </summary>
        string Name { get; set; }


        string Coments { get; }
        /// <summary>
        /// Имеет ли значение
        /// </summary>
        /// <returns></returns>
        bool HaveValue();

        /// <summary>
        /// Может ли быть запрошена
        /// </summary>
        /// <returns></returns>
        bool CanBeResolved();

        object Value { get; set; }

        string Comment { get; set; }

        bool IsConstant { get; set; }

        bool IsGoal { get; set; }

        void Resolve();

        List<string> PosibleValues { get; }

        string ValueType { get; }

        EventHandler RadyForInput{ get; set;}

        EventWaitHandle VarInpeted { get; set; }

        bool InputByUser { get; }

        bool IsFuzzy{ get;}

        EventHandler DuplicateWay { get; set; }

        void TryToResolve();

        void MakeAppended();

        bool AppendableValue { get; }
    }
}
